package com.wx.io.bytebuffer;

import java.nio.ByteBuffer;

/**
 * ByteBuffer的主要用法
 * 2020年12月31日21:10:29
 */
public class ByteBufferTest {
    public static void main(String[] args) {
        /*
         * 两种初始化的方式
         * 一种在jvm的堆上分配空间
         * 另外一种在jvm虚拟机外分配空间
         */
        ByteBuffer buffer = ByteBuffer.allocateDirect(16);
        ByteBuffer byteBuffer = ByteBuffer.allocate(16);

        // 当前位置
        int position = byteBuffer.position();
        // 当前的限制位置
        int limit = byteBuffer.limit();
        // ByteBuffer的总容量
        int capacity = byteBuffer.capacity();
        // java.nio.HeapByteBuffer[pos=0 lim=16 cap=16]
        System.out.println(byteBuffer);

        // 开启写模式
        byte b =1;
        byteBuffer.put(b);
        // java.nio.HeapByteBuffer[pos=1 lim=16 cap=16]
        System.out.println(byteBuffer);

        byteBuffer.putInt(2);
        //java.nio.HeapByteBuffer[pos=5 lim=16 cap=16]
        System.out.println(byteBuffer);
        // 将ByteBuffer 进行翻转，进入读模式
        byteBuffer.flip();
        // java.nio.HeapByteBuffer[pos=0 lim=5 cap=16]
        System.out.println(byteBuffer);
        byte[] bytes = new byte[5];
        byteBuffer.get(bytes);
        //bytes:1
        System.out.println("bytes[0]:"+String.valueOf(bytes[0]));
        // 将byte数组转化成int
        int anInt  = (((bytes[1] ) << 24) |((bytes[2] & 0xff) << 16) |((bytes[3] & 0xff) <<  8) | ((bytes[4] & 0xff) ));
        System.out.println("bytes[1-4]:"+anInt);
        //java.nio.HeapByteBuffer[pos=5 lim=5 cap=16]
        System.out.println(byteBuffer);
        // 压缩
        byteBuffer.compact();
        //java.nio.HeapByteBuffer[pos=0 lim=16 cap=16]
        System.out.println(byteBuffer);
        // 清除
        byteBuffer.clear();
        //java.nio.HeapByteBuffer[pos=0 lim=16 cap=16]
        System.out.println(byteBuffer);
    }
}
